package orders

import (
	"gitee.com/theegg/go-brick/app/model"
	"gitee.com/theegg/go-brick/app/service/app"
)

// 查询参数
type OrderQueryParams struct {
	PageSize   string `form:"page_size"  binding:"gte=0,lte=100" label:"每页数量"`
	PageIndex  string `form:"page_index" binding:"gte=0,lte=99999" label:"当前页数"`
	OrderID    string `form:"order_id" binding:"" label:"订单号"`
	CatId      string `form:"cat_id" binding:"" label:"分类ID"`
	GoodsId    string `form:"goods_id" binding:"" label:"商品ID"`
	MerchantId string `form:"merchant_id" binding:"" label:"商家ID"`
}

const (
	STATUS_INIT          = 1  // 初始化
	STATUS_PAIED         = 2  // 支付成功
	STATUS_USER_CANCEL   = -1 // 用户消单
	STATUS_SYSTEM_CANCEL = -2 // 系统消单
	STATUS_USER_RETURN   = -3 // 退单退款

	RETURN_STATUS_REVIEW_INIT = 1 // 退款待审核
	RETURN_STATUS_REVIEW_PASS = 2 // 审核通过
	RETURN_STATUS_FINISHED    = 3 // 退款完成

	LOGISTICS_PREPARE = 1 // 物流　商品出库中
	LOGISTICS_SENDED  = 2 // 物流　已经发货
	LOGISTICS_SIGN    = 3 // 物流　已签收
)

// 分页获取所有数据
// @param params map 参数
// @return interface{}, error
func GetDataList(params map[string]interface{}) (map[string]interface{}, error) {
	returnData := make(map[string]interface{}, 0)

	queryParams, errBuild := model.BuildAdminQueryParam(params)
	if errBuild != nil {
		return nil, app.NewError(errBuild)
	}

	query := app.Db().Desc("id").Limit(queryParams.Limit, queryParams.Offset)

	// query order_id
	if _, ok := queryParams.Params["order_id"]; ok && queryParams.Params["order_id"] != "" {
		query.Where("order_id = ?", queryParams.Params["order_id"])
	}

	// query goods_id
	if _, ok := queryParams.Params["goods_id"]; ok && queryParams.Params["goods_id"] != "" {
		query.Where("goods_id = ?", queryParams.Params["goods_id"])
	}

	// query MerchantId
	if _, ok := queryParams.Params["merchant_id"]; ok && queryParams.Params["merchant_id"] != "" {
		query.Where("merchant_id = ?", queryParams.Params["merchant_id"])
	}

	data := make([]Orders, 0)

	// 求总条数
	total, err := query.FindAndCount(&data)
	if err != nil {
		return nil, app.NewError(err)
	}

	returnData["data"] = data
	returnData["total"] = total

	return returnData, nil
}

// 获取单个数据
// @param id int64 数据的id
// @return *Nodes, error
func GetItemById(id int64) (*Orders, error) {
	node := new(Orders)
	has, err := app.Engine.Where("id = ?", id).Get(node)

	if err != nil {
		return nil, err
	}

	if !has {
		return nil, app.NewError("对不起, 目标对象不存在")
	}

	return node, nil
}

// @title ModifyStatus
// @description 修改管理员状态
func (m *Orders) ModifyStatus() (bool, error) {
	if m.Status == -1 {
		return false, app.NewError("对不起, 当前内容已经被删除!")
	}

	status := 1
	if m.Status == 1 {
		status = 0
	}

	affected, err := app.Db().Table(new(Orders)).ID(m.Id).Cols("status").Update(map[string]int{"status": status})

	if err != nil {
		return false, app.NewError(err)
	}

	// 生效条数
	if affected == 0 {
		return false, app.NewError("对不起, 指定的ID更新数量不正确")
	}

	return true, nil
}

// @title DeleteItem
// @description 下架
func (m *Orders) DeleteItem() error {

	if m.Status == -1 {
		return app.NewError("对不起, 当前内容已经被删除!")
	}

	m.Status = -1

	affected, errUpdate := app.Db().ID(m.Id).Cols("status").Update(m)

	if errUpdate != nil {
		return app.NewError(errUpdate)
	}

	if affected != 1 {
		return app.NewError("更新错误")
	}
	return nil
}
